#include <string.h>
#include <iostream>
using std::cout;
using std::endl;
//模板的特化
//字符串的相加操作  C风格字符串
//此时通用的模板便无法解决字符串的相加操作
//此时可以有两种方案：1编写一个普通的函数  2编写一个特化模板
template <class T>
T add(T t1, T t2){
    return t1 + t2;
}
//特化模板：了解即可，因为特化模板的写法基本和普通函数的写法一致的
//但是还是要比普通函数要复杂一些
//特化模板的使用场景是非常受限制的，只可以处理比如const char *类型
//没法像通用模板一样去处理通用的情形
//所以有些多此一举----建议大家直接编写普通函数
template <>
const char * add<const char *>(const char * p1,const char * p2){
    //先开空间
    char * ptmp = new char[strlen(p1) + strlen(p2) + 1]();
    strcpy(ptmp,p1);
    strcat(ptmp,p2);
    return ptmp;
}
void test(){
    const char * pstr = "hello";
    const char * pstr2 = "world";
    cout << add(pstr, pstr2) << endl;
}

int main()
{
    test();
    return 0;
}

